Below is a collection of spatial datasets used in this project.

Seattle Boundary

King County Subdivision Boundary

Tracts in King County

Although this assessment is primarily focused on three communities within the Seattle CCD subdivision of King County, one of the indicators (housing market conditions) uses neighboring tracts to determine displacement risk. Some of the neighboring tracts are part of other county subdivision, but rather than targeting just those specific tracts, this method collects data for all King County tracts and then runs the analysis on the appropriate subsets.

In the absence of a straight-forward method for identifying all the census tracts in the Seattle CCD subdivision of King County, it is possible to extract this information from American Factfinder. This tutorial describes how to use the American Factfinder interface to extract a list of all “all tracts within (or partially within) a census place”; substituting “county subdivision” for “place” will retrieve the desired results.

Puget Sound Waterbodies

These are useful for “clipping” census geographies whose boundaries extend into waterbodies.

KC Tracts Without (Western) Waterbodies

King County Without (Western) Waterbodies

LS0tCmRmX3ByaW50OiB0aWJibGUKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUKICBwZGZfZG9jdW1lbnQ6CiAgICBrZWVwX3RleDogeWVzCmFsd2F5c19hbGxvd19odG1sOiB5ZXMKLS0tCgpgYGB7ciBtaXNjLXNldHVwLCBlY2hvID0gRkFMU0UsIHdhcm5pbmc9RkFMU0UsbWVzc2FnZT1GQUxTRSxjb21tZW50PUZBTFNFfQpsaWJyYXJ5KG1hZ3JpdHRyKQpsaWJyYXJ5KG9wZXJhdG9yLnRvb2xzKQpsaWJyYXJ5KGtuaXRyKQpsaWJyYXJ5KHJwcm9qcm9vdCkKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkocmdkYWwpCmxpYnJhcnkoc3ApCmxpYnJhcnkocmdlb3MpCmxpYnJhcnkobWlzY2dpcykKbGlicmFyeSh0aWdyaXMpCmxpYnJhcnkobGVhZmxldCkKbGlicmFyeShnZ3RoZW1lcykKbGlicmFyeShzdHJpbmdyKQpsaWJyYXJ5KGRvd25sb2FkZXIpCmxpYnJhcnkobWlzY2dpcykKbGlicmFyeShzZikKcm9vdCA8LSBycHJvanJvb3Q6OmlzX3JzdHVkaW9fcHJvamVjdApyb290X2ZpbGUgPC0gcm9vdCRtYWtlX2ZpeF9maWxlKCkKYGBgCgpgYGB7ciBtaXNjLWNvbG9yc30KZ3JlZW4gPC0gbWlzY2dpczo6bWlzY2dpc19wYWxzJHRhYmxlYXVfY2F0W1siZ3JlZW4iXV0KYmx1ZSA8LSBtaXNjZ2lzOjptaXNjZ2lzX3BhbHMkdGFibGVhdV9jYXRbWyJibHVlIl1dCm9yYW5nZSA8LSBtaXNjZ2lzOjptaXNjZ2lzX3BhbHMkdGFibGVhdV9jYXRbWyJvcmFuZ2UiXV0KcmVkIDwtIG1pc2NnaXM6Om1pc2NnaXNfcGFscyR0YWJsZWF1X2NhdFtbInJlZCJdXQp0ZWFsIDwtIG1pc2NnaXM6Om1pc2NnaXNfcGFscyR0YWJsZWF1X2NhdFtbInRlYWwiXV0KcGFsX3JnYl80IDwtIG1pc2NnaXM6Om1pc2NnaXNfcGFscyR0YWJsZWF1X2NhdFtjKCJyZWQiLCJnb2xkIiwiZ3JlZW4iLCJibHVlIildICU+JSB1bmxpc3QgJT4lIHBhbGV0dGUoKQpwYWxfcmdiXzQgPC0gbWlzY2dpczo6bWlzY2dpc19wYWxzJHRhYmxlYXVfY2F0W2MoInJlZCIsImdvbGQiLCJncmVlbiIsImJsdWUiKV0gJT4lIHVubGlzdCAlPiUgcGFsZXR0ZSgpCnBhbF9yZ2JfNiA8LSBtaXNjZ2lzOjptaXNjZ2lzX3BhbHMkdGFibGVhdV9jYXRbYygicmVkIiwiZ29sZCIsImdyZWVuIiwiYmx1ZSIsIm9yYW5nZSIsInB1cnBsZSIpXSAlPiUgdW5saXN0ICU+JSBwYWxldHRlKCkKcGFsX3JnYl82IDwtIG1pc2NnaXM6Om1pc2NnaXNfcGFscyR0YWJsZWF1X2NhdFtjKCJyZWQiLCJnb2xkIiwiZ3JlZW4iLCJibHVlIiwib3JhbmdlIiwicHVycGxlIildICU+JSB1bmxpc3QgJT4lIHBhbGV0dGUoKQpgYGAKCkJlbG93IGlzIGEgY29sbGVjdGlvbiBvZiBzcGF0aWFsIGRhdGFzZXRzIHVzZWQgaW4gdGhpcyBwcm9qZWN0LgoKIyMjIFNlYXR0bGUgQm91bmRhcnkKCmBgYHtyIG1pc2Mtc2VhLWJvdW5kLCBmaWcuY2FwPSJTZWF0dGxlXCdzIGdlb2dyYXBoaWMgYm91bmRhcnkifQoKaWYoIWZpbGUuZXhpc3RzKHJvb3RfZmlsZSgnMS1kYXRhLzQtaW50ZXJpbS9zZWF0dGxlLXNmLnJkcycpKSl7CiAgICAgICAgdGlncmlzOjpwbGFjZXMoc3RhdGUgPSAiV0EiKSAlPiUKICAgICAgICAgICAgICAgIHRpZ3Jpczo6ZmlsdGVyX3BsYWNlKHBsYWNlID0gIlNlYXR0bGUiKSAlPiUKICAgICAgICAgICAgICAgIHNwVHJhbnNmb3JtKENSU29iaiA9IGNyc19wcm9qKSAlPiUgCiAgICAgICAgICAgICAgICBzdF9hc19zZigpICU+JSAKICAgICAgICAgICAgICAgIG1pc2NnaXM6OmNvZXJjZV90b19nZW9tKHNmOjpzdF9tdWx0aXBvbHlnb24pICU+JSAKICAgICAgICAgICAgICAgIHdyaXRlX3Jkcyhyb290X2ZpbGUoJzEtZGF0YS80LWludGVyaW0vc2VhdHRsZS1zZi5yZHMnKSkKICAgICAgICAKfQoKc2VhX3NmIDwtIHJlYWRfcmRzKHJvb3RfZmlsZSgnMS1kYXRhLzQtaW50ZXJpbS9zZWF0dGxlLXNmLnJkcycpKQoKZ3JlZW4gPC0gbWlzY2dpczo6bWlzY2dpc19wYWxzJHRhYmxlYXVfY2F0W1siZ3JlZW4iXV0KCm15TGZsdEdyZXkoZGF0YSA9IGFzKHNlYV9zZiwnU3BhdGlhbCcpKSAlPiUgCiAgICAgICAgbXlMZmx0T3B0cygpICU+JSAKICAgICAgICBhZGRQb2x5Z29ucyhjb2xvciA9IGdyZWVuLG9wYWNpdHkgPSAxLGZpbGxDb2xvciA9IGdyZWVuLGZpbGxPcGFjaXR5ID0gLjUpCgpgYGAKCiMjIyBLaW5nIENvdW50eSBTdWJkaXZpc2lvbiBCb3VuZGFyeQoKYGBge3IgbWlzYy1zZWEtY2NkLCBmaWcuY2FwPSJTZWF0dGxlIFN1YmRpdmlzaW9uIG9mIEtpbmcgQ291bnR5XCdzIGdlb2dyYXBoaWMgYm91bmRhcnkifQoKaWYoIWZpbGUuZXhpc3RzKHJvb3RfZmlsZSgnMS1kYXRhLzQtaW50ZXJpbS9zZWF0dGxlLWNjZC1zZi5yZHMnKSkpewogICAgICAgIHRpZ3Jpczo6Y291bnR5X3N1YmRpdmlzaW9ucyhzdGF0ZSA9ICI1MyIsY291bnR5ID0gIjAzMyIpICU+JSAKICAgICAgICAgICAgICAgIHN1YnNldChOQU1FID09ICJTZWF0dGxlIikgJT4lIAogICAgICAgICAgICAgICAgc3BUcmFuc2Zvcm0oQ1JTb2JqID0gY3JzX3Byb2opICU+JSAKICAgICAgICAgICAgICAgIHN0X2FzX3NmKCkgJT4lIAogICAgICAgICAgICAgICAgbWlzY2dpczo6Y29lcmNlX3RvX2dlb20oc2Y6OnN0X211bHRpcG9seWdvbikgJT4lIAogICAgICAgICAgICAgICAgd3JpdGVfcmRzKHJvb3RfZmlsZSgnMS1kYXRhLzQtaW50ZXJpbS9zZWF0dGxlLWNjZC1zZi5yZHMnKSkKfQoKc2VhX2NjZF9zZiA8LSByZWFkX3Jkcyhyb290X2ZpbGUoJzEtZGF0YS80LWludGVyaW0vc2VhdHRsZS1jY2Qtc2YucmRzJykpCgpteUxmbHRHcmV5KGRhdGEgPSBhcyhzZWFfY2NkX3NmLCdTcGF0aWFsJykpICU+JSAKICAgICAgICBteUxmbHRPcHRzKCkgJT4lIAogICAgICAgIGFkZFBvbHlnb25zKGNvbG9yID0gYmx1ZSxvcGFjaXR5ID0gMSxmaWxsQ29sb3IgPSBibHVlLGZpbGxPcGFjaXR5ID0gLjUpCgpgYGAKCiMjIyBUcmFjdHMgaW4gS2luZyBDb3VudHkKQWx0aG91Z2ggdGhpcyBhc3Nlc3NtZW50IGlzIHByaW1hcmlseSBmb2N1c2VkIG9uIHRocmVlIGNvbW11bml0aWVzIHdpdGhpbiB0aGUgU2VhdHRsZSBDQ0Qgc3ViZGl2aXNpb24gb2YgS2luZyBDb3VudHksIG9uZSBvZiB0aGUgaW5kaWNhdG9ycyAoaG91c2luZyBtYXJrZXQgY29uZGl0aW9ucykgdXNlcyBuZWlnaGJvcmluZyB0cmFjdHMgdG8gZGV0ZXJtaW5lIGRpc3BsYWNlbWVudCByaXNrLiBTb21lIG9mIHRoZSBuZWlnaGJvcmluZyB0cmFjdHMgYXJlIHBhcnQgb2Ygb3RoZXIgY291bnR5IHN1YmRpdmlzaW9uLCBidXQgcmF0aGVyIHRoYW4gdGFyZ2V0aW5nIGp1c3QgdGhvc2Ugc3BlY2lmaWMgdHJhY3RzLCB0aGlzIG1ldGhvZCBjb2xsZWN0cyBkYXRhIGZvciBhbGwgS2luZyBDb3VudHkgdHJhY3RzIGFuZCB0aGVuIHJ1bnMgdGhlIGFuYWx5c2lzIG9uIHRoZSBhcHByb3ByaWF0ZSBzdWJzZXRzLgoKSW4gdGhlIGFic2VuY2Ugb2YgYSBzdHJhaWdodC1mb3J3YXJkIG1ldGhvZCBmb3IgaWRlbnRpZnlpbmcgYWxsIHRoZSBjZW5zdXMgdHJhY3RzIGluIHRoZSBTZWF0dGxlIENDRCBzdWJkaXZpc2lvbiBvZiBLaW5nIENvdW50eSwgaXQgaXMgcG9zc2libGUgdG8gZXh0cmFjdCB0aGlzIGluZm9ybWF0aW9uIGZyb20gW0FtZXJpY2FuIEZhY3RmaW5kZXJdKGh0dHBzOi8vZmFjdGZpbmRlci5jZW5zdXMuZ292L2ZhY2VzL25hdi9qc2YvcGFnZXMvaW5kZXgueGh0bWwpLiBUaGlzIFt0dXRvcmlhbF0oaHR0cHM6Ly9hc2suY2Vuc3VzLmdvdi9mYXEucGhwP2lkPTUwMDAmZmFxSWQ9MTYwNSkgZGVzY3JpYmVzIGhvdyB0byB1c2UgdGhlIEFtZXJpY2FuIEZhY3RmaW5kZXIgaW50ZXJmYWNlIHRvIGV4dHJhY3QgYSBsaXN0IG9mIGFsbCAiYWxsIHRyYWN0cyB3aXRoaW4gKG9yIHBhcnRpYWxseSB3aXRoaW4pIGEgY2Vuc3VzIHBsYWNlIjsgc3Vic3RpdHV0aW5nICJjb3VudHkgc3ViZGl2aXNpb24iIGZvciAicGxhY2UiIHdpbGwgcmV0cmlldmUgdGhlIGRlc2lyZWQgcmVzdWx0cy4KCmBgYHtyIG1pc2MtdHIta2Mtd3RyfQoKaWYoIWZpbGUuZXhpc3RzKHJvb3RfZmlsZSgnMS1kYXRhLzQtaW50ZXJpbS90ci1rYy13dHItc2YucmRzJykpKXsKICAgICAgICAKICAgICAgICAjIEFsbCBLQyB0cmFjdHMKICAgICAgICB0cl9rY193dHJfc2YgPC0KICAgICAgICAgICAgICAgIHRpZ3Jpczo6dHJhY3RzKHN0YXRlID0gJzUzJyxjb3VudHkgPSAnMDMzJywgeWVhciA9IDIwMTQpICU+JQogICAgICAgICAgICAgICAgc3BUcmFuc2Zvcm0oQ1JTb2JqID0gY3JzX3Byb2opICU+JSAKICAgICAgICAgICAgICAgIHN0X2FzX3NmKCkgJT4lIAogICAgICAgICAgICAgICAgbWlzY2dpczo6Y29lcmNlX3RvX2dlb20oc2Y6OnN0X211bHRpcG9seWdvbikgCiAgICAgICAKICAgICAgICAgIyBTZWF0dGxlIENDRCB0cmFjdHMgCiAgICAgICAgICMgTm90ZTogYmVjYXVzZSB0aGlzIHNlbGVjdGlvbiBpbmNsdWRlcyBhbGwgdHJhY3RzICJ3aXRoaW4gb3IgcGFydGlhbGx5LXdpdGhpbiIgdGhlIFNlYXR0bGUgQ0MsCiAgICAgICAgICMgc2V2ZXJhbCB0cmFjdCBHRU9JRHMgYXJlIGR1cGxpY2F0ZWQgaW4gdGhlIHNlbGVjdGlvbi4gRm9yIHRoZSBzYWtlIG9mIGNsYXJpdHksIHRoZXNlIGR1cGxpY2F0ZXMKICAgICAgICAgIyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBmaW5hbCB2ZWN0b3Igb2YgR0VPSURzLgogICAgICAgIHRyX2NjZF9nZW9pZCA8LSAKICAgICAgICAgICAgICAgIHJlYWRfY3N2KAogICAgICAgICAgICAgICAgICAgICAgICByb290X2ZpbGUoJzEtZGF0YS8zLWV4dGVybmFsL21hbnVhbC9zZWF0dGxlLWNjZC9BQ1NfMTJfNVlSX0IwMTAwMS9BQ1NfMTJfNVlSX0IwMTAwMV93aXRoX2Fubi5jc3YnKSwgCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlcyA9IGNvbHMoSWQyID0gY29sX2NoYXJhY3RlcigpKSwgCiAgICAgICAgICAgICAgICAgICAgICAgIHNraXAgPSAxKSAlPiUgCiAgICAgICAgICAgICAgICBtdXRhdGUoTkVXX0dFT0lEMSA9IHN0cl9zdWIoSWQyLDEsNSksCiAgICAgICAgICAgICAgICAgICAgICAgTkVXX0dFT0lEMiA9IHN0cl9zdWIoSWQyLDE2LDIxKSwKICAgICAgICAgICAgICAgICAgICAgICBHRU9JRCA9IHBhc3RlMChORVdfR0VPSUQxLE5FV19HRU9JRDIpLAogICAgICAgICAgICAgICAgICAgICAgIFVOSVFVRSA9ICFkdXBsaWNhdGVkKEdFT0lEKSkgJT4lCiAgICAgICAgICAgICAgICBmaWx0ZXIoVU5JUVVFKSAlPiUgCiAgICAgICAgICAgICAgICBzZWxlY3QoR0VPSUQpICU+JSB1bmxpc3QodXNlLm5hbWVzID0gRikKICAgICAgICAKICAgICAgICAjIENyZWF0ZSBhIGNvdW50eSBTZWF0dGxlIENDRCBzdWJkaXZpc2lvbiBjb2x1bW4gYW5kIHNhdmUKCiAgICAgICAgdHJfa2Nfd3RyX3NmICU+JSAKICAgICAgICAgICAgICAgIG11dGF0ZShTRUFDQ0RfTEdMID0gaWZlbHNlKEdFT0lEICVpbiUgdHJfY2NkX2dlb2lkLFRSVUUsRkFMU0UpKSAlPiUgCiAgICAgICAgICAgICAgICB3cml0ZV9yZHMocm9vdF9maWxlKCcxLWRhdGEvNC1pbnRlcmltL3RyLWtjLXd0ci1zZi5yZHMnKSkKfQoKdHJfa2Nfd3RyX3NmIDwtIHJlYWRfcmRzKHJvb3RfZmlsZSgnMS1kYXRhLzQtaW50ZXJpbS90ci1rYy13dHItc2YucmRzJykpCgpzaG93X3RyX2NjZF93dHJfc2YgPC0gZnVuY3Rpb24oKXsKICAgICAgICAKICAgICAgICBzZWFjY2QgPC0gdHJfa2Nfd3RyX3NmICU+JSBmaWx0ZXIoU0VBQ0NEX0xHTCkKICAgICAgICBvdGhlcl9rYyA8LSB0cl9rY193dHJfc2YgJT4lIGZpbHRlcighU0VBQ0NEX0xHTCkKICAgICAgICAKICAgICAgICBteUxmbHRHcmV5KCkgJT4lIAogICAgICAgICAgICAgICAgbXlMZmx0T3B0cygpICU+JSAKICAgICAgICAgICAgICAgIGFkZFBvbHlnb25zKGRhdGEgPSBhcyhzZWFjY2QsIlNwYXRpYWwiKSx3ZWlnaHQgPSAuNSxjb2xvciA9IGJsdWUsb3BhY2l0eSA9IDEsZmlsbENvbG9yID0gYmx1ZSxmaWxsT3BhY2l0eSA9IC41KSAlPiUgCiAgICAgICAgICAgICAgICBhZGRQb2x5Z29ucyhkYXRhID0gYXMob3RoZXJfa2MsIlNwYXRpYWwiKSx3ZWlnaHQgPSAuNSxjb2xvciA9IG9yYW5nZSxvcGFjaXR5ID0gMSxmaWxsQ29sb3IgPSBvcmFuZ2UsZmlsbE9wYWNpdHkgPSAuNSkKfQoKc2hvd190cl9jY2Rfd3RyX3NmKCkKCgpgYGAKCiMjIyBQdWdldCBTb3VuZCBXYXRlcmJvZGllcwoKVGhlc2UgYXJlIHVzZWZ1bCBmb3IgImNsaXBwaW5nIiBjZW5zdXMgZ2VvZ3JhcGhpZXMgd2hvc2UgYm91bmRhcmllcyBleHRlbmQgaW50byB3YXRlcmJvZGllcy4KCmBgYHtyIG1pc2Mtd3RyLCBmaWcuY2FwPSJQdWdldCBTb3VuZCB3YXRlcmJvZGllcyJ9CgppZighZmlsZS5leGlzdHMocm9vdF9maWxlKCcxLWRhdGEvNC1pbnRlcmltL3d0ci1zZi5yZHMnKSkpewogICAgICAgIGZwX3d0ciA8LSByb290X2ZpbGUoJzEtZGF0YS8zLWV4dGVybmFsL05IRE1ham9yLmdkYicpCgojIGNoZWNrIGlmIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzLCBpZiBub3QgdGhlbiBkb3dubG9hZCBpdAppZighZmlsZS5leGlzdHMoZnBfd3RyKSl7CiAgICAgICAgCiAgICAgICAgdXJsIDwtICJmdHA6Ly93d3cuZWN5LndhLmdvdi9naXNfYS9pbmxhbmRXYXRlcnMvTkhEL05IRG1ham9yLmdkYi56aXAiICMgc2F2ZSB0aGUgVVJMIGZvciB0aGUgd2F0ZXJib2RpZXMgZGF0YQogICAgICAgIAogICAgICAgIHRlbXAgPC0gdGVtcGZpbGUoKSAjIGNyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlIHRvIGhvbGQgdGhlIGNvbXByZXNzZWQgZG93bmxvYWQKICAgICAgICAKICAgICAgICBkb3dubG9hZCh1cmwsIGRlc3QgPSB0ZW1wLCBtb2RlPSJ3YiIpICMgZG93bmxvYWQgdGhlIGZpbGUKICAgICAgICAKICAgICAgICB1bnppcCAodGVtcCwgZXhkaXIgPSByb290X2ZpbGUoJzEtZGF0YS8zLWV4dGVybmFsLycpKSAjIGV4dHJhY3QgdGhlIEVTUkkgZ2VvZGF0YWJhc2UgZmlsZSB0byBhIHByb2plY3QgZm9sZGVyCn0KCnd0cl9zcCA8LQogICAgICAgIHN1cHByZXNzV2FybmluZ3MocmVhZE9HUihkc24gPSBmcF93dHIsICAgICAgIyBjcmVhdGUgYSB3YXRlcmJvZGllcyBzaGFwZQogICAgICAgICAgICAgICAgbGF5ZXIgPSAiTkhEX01ham9yV2F0ZXJib2RpZXMiLHZlcmJvc2UgPSBGQUxTRSxwb2ludERyb3BaID0gVFJVRSkpICU+JQogICAgICAgIGdCdWZmZXIoYnlpZD1UUlVFLCB3aWR0aD0wKSAlPiUgIyBjbGVhbiB1cCBzZWxmLWludGVyc2VjdGluZyBwb2x5Z29ucwogICAgICAgIHNwVHJhbnNmb3JtKENSU29iaiA9IGNyc19wcm9qKSAgIyB0cmFuc2Zvcm0gdGhlIHByb2plY3Rpb24gdG8gbWF0Y2ggdGhlIHByb2plY3QgcHJvamVjdGlvbgp3dHJfc2YgPC0gIAogICAgICAgIHd0cl9zcCAlPiUgCiAgICAgICAgc3RfYXNfc2YoKSAlPiUgCiAgICAgICAgbWlzY2dpczo6Y29lcmNlX3RvX2dlb20oc3RfbXVsdGlwb2x5Z29uKQoKd3RyX3NmICU+JSAKICAgICAgICBzdF9pbnRlcnNlY3RzKHggPSBzZWFfY2NkX3NmLHkgPSAuKSAlPiUgCiAgICAgICAgdW5saXN0KHVzZS5uYW1lcyA9IEYpICU+JSAKICAgICAgICB3dHJfc2ZbLixdICU+JSAKICAgICAgICB3cml0ZV9yZHMocm9vdF9maWxlKCcxLWRhdGEvNC1pbnRlcmltL3d0ci1zZi5yZHMnKSkKfQoKd3RyX3NmIDwtIHJlYWRfcmRzKHJvb3RfZmlsZSgnMS1kYXRhLzQtaW50ZXJpbS93dHItc2YucmRzJykpCgpzaG93X3d0ciA8LSBmdW5jdGlvbigpewogICAgICAgIG15TGZsdEdyZXkoZGF0YSA9IGFzKHd0cl9zZiwnU3BhdGlhbCcpKSAlPiUgCiAgICAgICAgICAgICAgICBteUxmbHRPcHRzKCkgJT4lIAogICAgICAgICAgICAgICAgYWRkUG9seWdvbnMoY29sb3IgPSBibHVlLCBvcGFjaXR5ID0gMSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQgPSAuNSwgZmlsbENvbG9yID0gYmx1ZSxmaWxsT3BhY2l0eSA9IC41KSAgICAgICAgCn0KCnNob3dfd3RyKCkKCmBgYAoKIyMjIEtDIFRyYWN0cyBXaXRob3V0IChXZXN0ZXJuKSBXYXRlcmJvZGllcwpgYGB7ciBtaXNjLXRyYWN0cy1jY2Qtbm8td3RyfQoKaWYoIWZpbGUuZXhpc3RzKHJvb3RfZmlsZSgnMS1kYXRhLzQtaW50ZXJpbS90ci1rYy1zZi5yZHMnKSkpewogICAgICAgIHRyX2tjX3d0cl9zZiAlPiUgCiAgICAgICAgICAgICAgICBmaWx0ZXIoVFJBQ1RDRSAlIWluJSAnOTkwMTAwJykgJT4lICMgcmVtb3ZlIHRoZSBQdWdldCBTb3VuZCB0cmFjdAogICAgICAgICAgICAgICAgbXV0YXRlKGdlb21ldHJ5ID0gc3RfZGlmZmVyZW5jZShnZW9tZXRyeSxzdF91bmlvbih3dHJfc2YpKSkgJT4lIAogICAgICAgICAgICAgICAgY29lcmNlX3RvX2dlb20oc3RfbXVsdGlwb2x5Z29uKSAlPiUgCiAgICAgICAgICAgICAgICB3cml0ZV9yZHMocm9vdF9maWxlKCcxLWRhdGEvNC1pbnRlcmltL3RyLWtjLXNmLnJkcycpKQp9Cgp0cl9rY19zZiA8LSByZWFkX3Jkcyhyb290X2ZpbGUoJzEtZGF0YS80LWludGVyaW0vdHIta2Mtc2YucmRzJykpCgpzaG93X3RyX2tjX3NmIDwtIGZ1bmN0aW9uKCl7CiAgICAgICAgCiAgICAgICAgc2VhY2NkIDwtIHRyX2tjX3NmICU+JSBmaWx0ZXIoU0VBQ0NEX0xHTCkKICAgICAgICBvdGhlcl9rYyA8LSB0cl9rY19zZiAlPiUgZmlsdGVyKCFTRUFDQ0RfTEdMKQogICAgICAgIAogICAgICAgIG15TGZsdEdyZXkoKSAlPiUgCiAgICAgICAgICAgICAgICBteUxmbHRPcHRzKCkgJT4lIAogICAgICAgIGFkZFBvbHlnb25zKGRhdGEgPSBhcyhzZWFjY2QsIlNwYXRpYWwiKSx3ZWlnaHQgPSAuNSxjb2xvciA9IGJsdWUsb3BhY2l0eSA9IDEsZmlsbENvbG9yID0gYmx1ZSxmaWxsT3BhY2l0eSA9IC41KSAlPiUgCiAgICAgICAgYWRkUG9seWdvbnMoZGF0YSA9IGFzKG90aGVyX2tjLCJTcGF0aWFsIiksd2VpZ2h0ID0gLjUsY29sb3IgPSBvcmFuZ2Usb3BhY2l0eSA9IDEsZmlsbENvbG9yID0gb3JhbmdlLGZpbGxPcGFjaXR5ID0gLjUpCn0KCnNob3dfdHJfa2Nfc2YoKQoKCgpgYGAKCiMjIyBLaW5nIENvdW50eSBXaXRob3V0IChXZXN0ZXJuKSBXYXRlcmJvZGllcwoKYGBge3IgbWlzYy1rY30KCmlmKCFmaWxlLmV4aXN0cyhyb290X2ZpbGUoJzEtZGF0YS80LWludGVyaW0va2Mtc2YucmRzJykpKXsKICAgICAgICB0aWdyaXM6OmNvdW50aWVzKHN0YXRlID0gJzUzJywgY2IgPSBUUlVFKSAlPiUgCiAgICAgICAgICAgICAgICBzdF9hc19zZigpICU+JSAKICAgICAgICAgICAgICAgIHN0X3RyYW5zZm9ybShjcnNfcHJvakBwcm9qYXJncykgJT4lIAogICAgICAgICAgICAgICAgZmlsdGVyKE5BTUUgJWluJSAnS2luZycpICU+JSAKICAgICAgICAgICAgICAgIG1pc2NnaXM6OmNvZXJjZV90b19nZW9tKHNmOjpzdF9tdWx0aXBvbHlnb24pICU+JSAKICAgICAgICAgICAgICAgIG11dGF0ZShnZW9tZXRyeSA9IHN0X2RpZmZlcmVuY2UoZ2VvbWV0cnksc3RfdW5pb24od3RyX3NmKSkpICU+JSAKICAgICAgICAgICAgICAgIHdyaXRlX3Jkcyhyb290X2ZpbGUoJzEtZGF0YS80LWludGVyaW0va2Mtc2YucmRzJykpCiAgICAgICAgCn0KCmtjX3NmIDwtIHJlYWRfcmRzKHJvb3RfZmlsZSgnMS1kYXRhLzQtaW50ZXJpbS9rYy1zZi5yZHMnKSkKCgpgYGAKCg==